package com.myapp.hibernate.model;
// Generated 25-jun-2013 13:42:51 by Hibernate Tools 3.2.1.GA

import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Font;
import com.itextpdf.text.FontFactory;
import com.itextpdf.text.Image;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;
import com.myapp.hibernate.util.BoxeadorUtil;
import com.myapp.hibernate.util.CombateUtil;
import com.myapp.hibernate.util.EstadioUtil;
import java.awt.Desktop;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

/**
 * Entrada generated by hbm2java
 */
public class Entrada implements java.io.Serializable {

    private Integer idEntrada;
    private int idCombate;
    private int idUsuario;
    private int numero;
    private float precio;

    public Entrada() {
    }

    public Entrada(int idCombate, int idUsuario, int numero, float precio) {
        this.idCombate = idCombate;
        this.idUsuario = idUsuario;
        this.numero = numero;
        this.precio = precio;
    }

    public Integer getIdEntrada() {
        return this.idEntrada;
    }

    public void setIdEntrada(Integer idEntrada) {
        this.idEntrada = idEntrada;
    }

    public int getIdCombate() {
        return this.idCombate;
    }

    public void setIdCombate(int idCombate) {
        this.idCombate = idCombate;
    }

    public int getIdUsuario() {
        return this.idUsuario;
    }

    public void setIdUsuario(int idUsuario) {
        this.idUsuario = idUsuario;
    }

    public int getNumero() {
        return this.numero;
    }

    public void setNumero(int numero) {
        this.numero = numero;
    }

    public float getPrecio() {
        return this.precio;
    }

    public void setPrecio(float precio) {
        this.precio = precio;
    }

    public void enviaEmail(Usuario usuario) throws MessagingException {
        // Propiedades de la conexión
        Properties props = new Properties();
        props.setProperty("mail.smtp.host", "smtp.gmail.com");
        props.setProperty("mail.smtp.starttls.enable", "true");
        props.setProperty("mail.smtp.port", "587");
        props.setProperty("mail.smtp.user", "betboxingupo@gmail.com");
        props.setProperty("mail.smtp.auth", "true");

        // Preparamos la sesion
        Session session = Session.getDefaultInstance(props);

        BoxeadorUtil boxeadorUtil = new BoxeadorUtil();
        CombateUtil combateUtil = new CombateUtil();
        Combate c = combateUtil.obtenerCombate(this.idCombate);
        Boxeador b1 = boxeadorUtil.obtenerBoxeador(c.getIdBoxeador1());
        Boxeador b2 = boxeadorUtil.obtenerBoxeador(c.getIdBoxeador2());
        EstadioUtil estadioUtil = new EstadioUtil();
        Estadio e = estadioUtil.obtenerEstadio(c.getIdEstadio());
        // Construimos el mensaje que se va a mandar
        String mensaje = "";
        mensaje += "Hola " + usuario.getNombre() + " " + usuario.getApellidos() + " <br /><br /> le informamos que la compra de su entrada se ha realizado correctamente"
                + ". Los datos son los siguientes:<br /><br />";
        mensaje += "<center><table border='1'>";
        mensaje += "<tr><th>Combate</th><td>" + b1.getNombre()+" "+b1.getApellidos()+" VS "+b2.getNombre()+" "+b2.getApellidos() + "</td></tr>";
        mensaje += "<tr><th>Estadio</th><td>" + e.getNombre() + "</td></tr>";
        mensaje += "<tr><th>Fecha</th><td>" + c.getFecha() + "</td></tr>";
        mensaje += "<tr><th>Precio</th><td>" + this.getPrecio() + "</td></tr>";
        mensaje += "</table></center>";
        mensaje += "<br /><br />&iexcl;Muchas gracias por comprar entradas en nuestra aplicacion&excl; <br /><br /><br />";
        mensaje += "Mensaje enviado autom&aacute;ticamente, no conteste. <br/>";

        MimeMessage message = new MimeMessage(session);
        // Asunto del mensaje
        message.setSubject("Entrada comprada con exito");
        // Emisor del mensaje        
        message.setFrom(new InternetAddress("betboxingupo@gmail.com"));
        message.setContent(mensaje, "text/html");
        // Receptor del mensaje, a quien se le va a enviar
        message.addRecipient(Message.RecipientType.TO, new InternetAddress(usuario.getEmail()));

        // Envia correo
        Transport t = session.getTransport("smtp");
        // t.connect( direccion de correo, contraseña)
        t.connect("betboxingupo@gmail.com", "grupo05it");
        t.sendMessage(message, message.getAllRecipients());

        // Cierre.
        t.close();
    }
    
    public void generarPDF(String ruta, Usuario usuario) throws DocumentException, IOException{
        //Creamos el documento y asignamos margenes izq,der,arriba,abajo
        Document document = new Document(PageSize.A4, 50, 50, 50, 50);
        //creamos el "escritor" de nuestro Documento pdf, especificando la ubicacion y nombre de este.
        PdfWriter.getInstance(document,new FileOutputStream(ruta + "\\PDF\\entrada.pdf"));
        //abrimos el escritor
        document.open();
        //ponemos una imagen
        Image jpg = Image.getInstance(ruta+"\\images\\boxingPortada.jpg");
        jpg.setAlignment(Image.MIDDLE);
        jpg.scalePercent(20, 20);
        document.add(jpg);
        Paragraph titulo = new Paragraph("\nDatos de la compra de la entrada\n"
                ,FontFactory.getFont(FontFactory.HELVETICA,18, Font.BOLDITALIC, BaseColor.BLUE));
        document.add(titulo);
        Paragraph frase = new Paragraph("Muchas gracias por comprar entradas en BetBoxing. Le informamos de los datos del combate"
                ,FontFactory.getFont(FontFactory.HELVETICA, 16,Font.BOLD, BaseColor.BLACK));
        document.add(frase);
        BoxeadorUtil boxeadorUtil = new BoxeadorUtil();
        CombateUtil combateUtil = new CombateUtil();
        Combate combate = combateUtil.obtenerCombate(this.idCombate);
        Boxeador b1 = boxeadorUtil.obtenerBoxeador(combate.getIdBoxeador1());
        Boxeador b2 = boxeadorUtil.obtenerBoxeador(combate.getIdBoxeador2());
        EstadioUtil estadioUtil = new EstadioUtil();
        Estadio e = estadioUtil.obtenerEstadio(combate.getIdEstadio());
        String datosc = "\nSus datos son:\n      Nombre: " + usuario.getNombre() +
                "\n      Apellidos: " + usuario.getApellidos() +
                "\n      Email: " + usuario.getEmail();
        Paragraph subTituloc = new Paragraph(datosc,FontFactory.getFont(FontFactory.HELVETICA, 12,Font.NORMAL, BaseColor.BLACK));
        document.add(subTituloc);
        Paragraph tituloprod = new Paragraph("\nDatos del combate:\n\n\n",
                FontFactory.getFont(FontFactory.HELVETICA, 12,Font.NORMAL, BaseColor.BLACK));
        document.add(tituloprod);

        //Tabla de productos
        PdfPTable table=new PdfPTable(2);
        table.addCell("ESTADIO");
        table.addCell(e.getNombre());
        table.addCell("BOXEADOR");
        table.addCell(b1.getNombre()+" "+b1.getApellidos());
        table.addCell("BOXEADOR");
        table.addCell(b2.getNombre()+" "+b2.getApellidos());
        table.setWidthPercentage(100);
        document.add(table);

        //cerramos el "escritor"
        document.close();//Para generar el pdf

        //Abrimos el pdf
        File f = new File(ruta+"\\PDF\\entrada.pdf");
        Desktop.getDesktop().open(f);
    }

}
